std::remove_all_extents
From Cppreference
| C++ Standard Library | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Utilities library | ||||||||||||||||||||||||||||
| Type support | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
| Defined in header <type_traits>
| ||
| template< class T >
struct remove_all_extents; | (C++11 feature) | |
If T is a multidimensional array of some type X, provides the member typedef type equal to X, otherwise type is T.
Contents |
[edit] Member types
| Name | Definition |
| type | the type of the element of T |
[edit] Equivalent definition
template<class T> struct remove_all_extents { typedef T type;}; template<class T> struct remove_all_extents<T[]> { typedef typename remove_all_extents<T>::type type; }; template<class Tp, std::size_t N> struct remove_all_extents<T[N]> { typedef typename remove_all_extents<T>::type type; }; |
[edit] Example
#include <iostream> #include <type_traits> template<typename A> typename std::enable_if< std::is_same<int, typename std::remove_all_extents<A>::type>::value >::type foo(const A&) { std::cout << "This is a " << std::rank<A>::value << "D array of int\n"; } int main() { int a[1][2][3]; foo(a); float b[2]; // foo(b); // compile-time error }
Output:
This is a 3D array of int
[edit] See also
| checks if a type is an array type (class template) | ||
| obtains the number of dimensions of an array type (class template) | ||
| obtains the size of an array type along a specified dimension (class template) | ||
| removes one extent from the given array type (class template) | ||